package com.koicarp.agent.example.chatmemery;

import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;

/**
 * @Author: liuxia
 * @CreateTime: 2025/9/14 下午3:48
 * @Description: 系统消息test
 */
public class SystemMessageTest {

    @Resource
    PersistentChatMemoryStore store;

    /**
     * 测试SystemMessage 不会删除
     */
    @Test
    public  void noDelTest() {
        MessageWindowChatMemory memory = MessageWindowChatMemory.builder()
                .id("1234")                 // id，通常用于区分多个用户或多个对话
                .maxMessages(2)             // 最大存储消息数量
                .chatMemoryStore(store)     // 持久化缓存存储类
                .build();

        SystemMessage systemMessage = SystemMessage.from("你是写诗小能手，能够帮助用户提供优美的七言等类型诗词。");
        memory.add(systemMessage);
        memory.add(UserMessage.from("测试数量1"));
        memory.add(UserMessage.from("测试数量2"));
        for (ChatMessage message : memory.messages()) {
            /**
             * 只会展示system信息和测试数量2，如下：
             * SYSTEM : SystemMessage { text = "你是写诗小能手，能够帮助用户提供优美的七言等类型诗词。" }
             * USER : UserMessage { name = null contents = [TextContent { text = "测试数量2" }] }
             */
            System.out.println(message.type() +  " : " + message);
        }
        System.out.println(memory.messages().size());
    }

    /**
     * 测试SystemMessage 重复添加相同内容
     */
    @Test
    public void multipleAddSameTest() {
        MessageWindowChatMemory memory = MessageWindowChatMemory.builder()
                .id("1234")                 // id，通常用于区分多个用户或多个对话
                .maxMessages(4)             // 最大存储消息数量
                .chatMemoryStore(store)     // 持久化缓存存储类
                .build();
        SystemMessage systemMessage = SystemMessage.from("你是写诗小能手，能够帮助用户提供优美的七言等类型诗词。");
        memory.add(systemMessage);
        memory.add(systemMessage);
        System.out.println("总数：" + memory.messages().size());
        System.out.println("数据：" + memory.messages().get(0));
        /**
         * 打印数据如下：
         * 总数：1
         * 数据：SystemMessage { text = "你是写诗小能手，能够帮助用户提供优美的七言等类型诗词。" }
         */
    }

    /**
     * 测试SystemMessage 重复添加不相同内容
     */
    @Test
    public void multipleAddNoSameTest() {
        MessageWindowChatMemory memory = MessageWindowChatMemory.builder()
                .id("1234")                 // id，通常用于区分多个用户或多个对话
                .maxMessages(4)             // 最大存储消息数量
                .chatMemoryStore(store)     // 持久化缓存存储类
                .build();
        SystemMessage systemMessage1 = SystemMessage.from("你是写诗小能手，能够帮助用户提供优美的七言等类型诗词。");
        memory.add(systemMessage1);
        SystemMessage systemMessage2 = SystemMessage.from("你是画画小能手，能够帮助用户提供画画思路。");
        memory.add(systemMessage2);

        System.out.println("总数：" + memory.messages().size());
        System.out.println("数据：" + memory.messages().get(0));
        /**
         * 打印数据如下：
         * 总数：1
         * 数据：SystemMessage { text = "你是画画小能手，能够帮助用户提供画画思路。" }
         */
    }
}
